<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //reduce循环: 累加结果值
      var arr = [1, 2, 3, 4, 5];

      var res = arr.reduce(function (current, item, key, arr) {
        console.log(current, item, key, arr);
        return current + item;
      }, 0);
      console.log("最终的结果是", res);
      /*
              第一遍循环  初始值0 作为current的值 item就是1
                        返回值current + item ===1 会作为下一次循环的current值
              第二遍循环  current 1   item2
                        返回值 current + item ===3
              第三次循环  current3  item 3
                        返回值 current + item ===6
            第四次循环  current6 item4
                        返回值 current + item ===10
            第五次 最后一次 current 10 item 5
                        返回值 current + item ===15 作为res的值
              */

      // 万物皆可累加
      //累加数组
      //   var arr = ["a", "a", "c"];
      //   var newArr = [];
      //   for (var i = 0; i < arr.length; i++) {
      //     if (newArr.indexOf(arr[i]) === -1) {
      //       newArr.push(arr[i]);
      //     }
      //   }
      //   console.log(newArr);

      //利用reduce实现数组的去重
      var arr = ["a", "a", "c"];
      arr.reduce(function (current, item) {
        if (current.indexOf(item) === -1) {
          current.push(item);
        }
        return current;
      }, []);
      /*
            第一次: 初始值[]  current=[]
            判断 [].indexOf["a"] ===-1  进入判断 current变成["a"]
            第二次 初始值["a"] item 为"a"
            判断["a"].indexOf["a"]===0  不是-1  不会进判断 current还是["a"]  return current["a"]
            第三次 current["a"] item="c"
            判断["a"].indexOf["c"]===-1  进入判断
            current变成["a","c"] return["a","c"]  最终结果就是["a","c"]
            */

      // 对象的累加
      var arr = ["a", "a", "a", "c", "b", "b"];
      // 生成一个对象

      var obj = {
        a: 3,
        b: 2,
        c: 1,
      };

      //for循环
      for (var i = 0; i < arr.length; i++) {
        // 查看obj对象里有没有 数组里的属性
        // 判断 如果 obj里没有这个属性，那么就在obj里添加这个属性
        if (typeof obj[arr[i]] === "undefined") {
          obj[arr[i]] = 1;
        } else {
          obj[arr[i]]++;
        }
      }
      console.log(obj);

      var res = arr.reduce(function (current, item) {
        if (typeof current[item] === "undefined") {
          current[item] = 1;
        } else {
          current[item]++;
        }
        return current;
      }, {});
      console.log(res);
    </script>
  </body>
</html>
